#include <iostream>


//懒汉模式
template <typename T>
class EagerSingleton {
private:
    static T instance;       // 静态实例（直接初始化）

    // 私有化构造函数/析构函数
    EagerSingleton() = default;
    ~EagerSingleton() = default;

public:
    // 删除拷贝构造和赋值运算符
    EagerSingleton(const EagerSingleton&) = delete;
    EagerSingleton& operator=(const EagerSingleton&) = delete;

    static T& GetInstance() {
        return instance;  // 直接返回已存在的实例
    }
};

// 静态成员变量初始化（需在头文件外或模板特化中定义）
template <typename T>
T EagerSingleton<T>::instance;


//饿汉模式
template <typename T>
class EagerSingleton {
private:
    static T instance;       // 静态实例（直接初始化）
 
    // 私有化构造函数/析构函数
    EagerSingleton() = default;
    ~EagerSingleton() = default;
 
public:
    // 删除拷贝构造和赋值运算符
    EagerSingleton(const EagerSingleton&) = delete;
    EagerSingleton& operator=(const EagerSingleton&) = delete;
 
    static T& GetInstance() {
        return instance;  // 直接返回已存在的实例
    }
};
 
// 静态成员变量初始化（需在头文件外或模板特化中定义）
template <typename T>
T EagerSingleton<T>::instance;
 


